A conventional disk drive stores data bytes on disk drive platters in sets of a predetermined length. A disk drive controller or a host computer may generate error correction code (ECC) bytes and cyclic redundancy check (CRC) bytes for each set of data bytes. Sometimes, the host computer generates CRC bytes, and the disk controller generates its own set of CRC bytes. The CRC and the ECC bytes are appended to the end of the set of data bytes. The data bytes, CRC bytes and ECC bytes together make up a `sector`, and this sector is stored on the disk platter. When the disk drive controller reads a sector off the disk, the data bytes and CRC bytes are stored in a buffer unit (memory) in the disk drive. An ECC unit detects and corrects errors in the sector read off the platter. These corrections are made to the data bytes and CRC bytes stored in the buffer unit.
The ECC unit may, however, fail to detect one or more errors in the data and CRC bytes read off the disk when there is actually is an error. If the ECC unit misses an error, it will also fail to correct the data and CRC bytes to their original values before the data bytes are sent to the host computer. Another miscorrection situation is where the ECC unit detects a true error but fails to correct the erroneous byte(s) properly. Both of these situations are miscorrections. Disk drives with ECC units that have higher error detection and correction capabilities experience a higher probability of miscorrection and failed corrections.
After the ECC unit makes corrections (or miscorrections) to the data and CRC bytes stored in the buffer unit, the disk drive controller reads the contents of the buffer and transfers these contents across a bus to a host computer. For example, the bus may be a Small Computer Systems Interface (SCSI) bus. As the data is being transferred, a CRC check unit in some disk drives accumulates the `corrected` data bytes as they are being transferred to the host, generates a CRC residue, and checks for any miscorrections or failed corrections by the ECC unit. The CRC check unit does not complete its analysis on whether the transferred data contains any miscorrections or failed corrections until after the data transfer to the host computer is complete. After an incorrect data transfer to the host is complete, the CRC check unit sends an error message to the host computer if the data the host computer received contains miscorrections and/or failed corrections. The host computer must discard the erroneous data bytes and send a request to the disk drive to reread the data bytes from the disk platter and retransmit the data bytes to the host computer.
This is inefficient because during the time that the host computer receives the erroneous data, receives a message from the CRC check unit, requests the disk drive controller to retransmit the data, and waits for new data to be read and transferred, the host computer could be doing some other task. This is also inefficient because the transmissions, retransmissions and CRC check messages take up bandwidth on the SCSI bus.
Furthermore, there is a detrimental impact on performance on the host side. Some host computers, interfaces and/or software applications cannot process the incorrect data. This may result in breakdowns in applications currently being run by the host computer. Some host computers can process incorrect data but they cannot recover quickly, and this causes undesirable delays.